package com.ruoyi.api.service.impl;

import com.ruoyi.api.service.InterceptUtilService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.product.domain.AICode;
import com.ruoyi.product.domain.ProductModel;
import com.ruoyi.product.mapper.AICodeMapper;
import com.ruoyi.product.mapper.ProductMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 字符串截取
 *
 * @author songjz
 */
@Service
public class InterceptUtilServiceImpl implements InterceptUtilService {
    @Autowired
    private AICodeMapper aiCodeMapper;

    @Autowired
    private ProductMapper productMapper;

    /**
     * 截取字符 判断条形码是否正确
     *
     * @param barcode 条形码内容
     * @return 结果
     */
    @Override
    public String intercept(String[] barcode) {

        boolean flag = true;
        String modelCode = "";
        for (int i = 0; i < barcode.length; i++) {
            barcode[i] = barcode[i].replaceAll("\\(|\\)", "");
            String firstCode = barcode[i].substring(0, 2);
            if (!"01".equals(firstCode)) {
                flag = false;
            } else {
                try {
                    modelCode = barcode[i].substring(2, 16);
                    flag = true;
                } catch (Exception ignored) {
                    flag = false;
                }
                break;
            }
        }

        if (flag) {
            return modelCode;
        } else {
            return "0";
        }
    }

    /**
     * 截取字符 判断条形码是否正确
     *
     * @param barcode 条形码内容
     * @return 结果
     */
    @Override
    public List<Map<String, String>> intercept(Long productId, String[] barcode, Long supperId, String modelCode) {
//        Long companyId = 101L;
        Long companyId = SecurityUtils.getLoginUser().getUser().getCompanyId();
        if (productId == null) {
            String intercept = intercept(barcode);
            if ("0".equals(intercept)) {
                throw new RuntimeException("请扫描01开头的AI码");
            }
            // 切除AI编号
            ProductModel productModel = productMapper.selectProductByModelCode(supperId == null ? companyId : supperId, modelCode);
            if (productModel == null) {
                throw new RuntimeException("未找到该产品信息");
            }
            productId = productModel.getProductId();
        }
        AICode aiCode = new AICode();
        aiCode.setProductId(productId);
        aiCode.setDeptId(supperId == null ? companyId : supperId);
        //查询所有的产品AI码，并将其放入map集合中，
        List<AICode> aiCodes = aiCodeMapper.selectAICode(aiCode);

        if (aiCodes.size() == 0) {
            throw new RuntimeException("未找到该产品的AI码信息，请设置AI码信息");
        }

        if (aiCodes.size() != barcode.length) {
            throw new RuntimeException("扫描的行数与设置的AI码行数不一致，清空扫描信息");
        }
        return getScanData(barcode, aiCodes);
    }

    private void interceptes(Map<String, String> map, String barcode, HashMap<String, String> maps) {

        String firstCode = barcode.substring(0, 2);

        if (!map.containsKey(firstCode)) {
            barcode = "";
            maps.clear();
            return;
        }
        //需要截取的长度
        Long aLong = Long.parseLong(map.get(firstCode));
        // 切除AI编号
        String nextStr = barcode.substring(2);
        // 截取指定长度字符串
        if (aLong > nextStr.length()) {
            nextStr = "";
            maps.clear();
            return;
        }
        String code = "";
        if (aLong.intValue() == 0) {

        } else {
            code = nextStr.substring(0, aLong.intValue());
        }
        maps.put(firstCode, code);
        // 截取剩余字符串
        String syStr = nextStr.substring(aLong.intValue());
        if (0 < syStr.length() && syStr.length() < 2) {
            syStr = "";
            maps.clear();
        }
        if (!syStr.equals("")) {
            this.interceptes(map, syStr, maps);
        }
    }

    private void intercepts(Map<String, Long> map, String barcode, HashMap<String, String> maps) {
        String firstCode = barcode.substring(0, 2);
        if (!map.containsKey(firstCode)) {
            throw new RuntimeException("没有相符的AI码");
        }
        //需要截取的长度
        Long aLong = map.get(firstCode);
        // 切除AI编号
        String nextStr = barcode.substring(2);
        // 截取指定长度字符串
        if (aLong > nextStr.length()) {
//            return ;
            throw new RuntimeException("AI码格式错误");
        }
        String code = nextStr.substring(0, aLong.intValue());
        maps.put(firstCode, code);
        // 截取剩余字符串
        String syStr = nextStr.substring(aLong.intValue());
        if (!syStr.equals("")) {
            this.intercepts(map, syStr, maps);
        }
//        return ;
    }

    /**
     * 传入扫描的条码信息，以及该产品设置的条形码规则 返回 List<Map<String, String>>集合
     *
     * @param barcode 扫描的信息
     * @param aiCodes 根据产品id 查询出来 设置的条形码
     * @return List<Map < String, String>>
     */
    @Override
    public List<Map<String, String>> getScanData(String[] barcode, List<AICode> aiCodes) {
        List<Map<String, String>> mapList = new ArrayList<>();
        HashMap<String, String> map = new HashMap<>();

        //前端 扫描到的码 可能顺序是乱的 需要跟aiCodes顺序匹配
        String[] newArr = new String[aiCodes.size()];
        int index = 0;
        for (int i = 0; i < aiCodes.size(); i++) {
            AICode aiCodeData = aiCodes.get(i);
            String aiCode1 = aiCodeData.getAiCode1();
            for (int j = 0; j < barcode.length; j++) {
                String str = barcode[j];
                if (aiCode1.equals(str.substring(0, aiCode1.length()))) {
                    newArr[index++] = str;
                }
            }
        }
        //截取
        try {
            for (int i = 0; i < aiCodes.size(); i++) {
                AICode aiCodeData = aiCodes.get(i);
                String rowStr = newArr[i];
                //已截取的长度
                int subLength = 0;
                //
                if (!"10".equals(aiCodeData.getAiCode1())) {
                    map.put(aiCodeData.getAiCode1(), rowStr.substring(aiCodeData.getAiCode1().length(), aiCodeData.getAiCode1().length() + Integer.parseInt(aiCodeData.getAiBit1())));
                    subLength += aiCodeData.getAiCode1().length() + Integer.parseInt(aiCodeData.getAiBit1());
                } else {
                    int length = 0;
                    //10的话 则要反过来截取
                    if (aiCodeData.getAiCode7() != null && !"".equals(aiCodeData.getAiCode7())) {
                        map.put(aiCodeData.getAiCode7(), rowStr.substring(rowStr.length() - Integer.parseInt(aiCodeData.getAiBit7())));
                        //判断截取完之后 前两位是否和aicode一致
                        if (!aiCodeData.getAiCode7().equals(rowStr.substring(rowStr.length() - aiCodeData.getAiCode7().length() - Integer.parseInt(aiCodeData.getAiBit7())
                                , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit7())))) {
                            throw new RuntimeException("扫描错误，清空扫描信息");
                        }
                        length += aiCodeData.getAiCode7().length() + Integer.parseInt(aiCodeData.getAiBit7());
                    }
                    if (aiCodeData.getAiCode6() != null && !"".equals(aiCodeData.getAiCode6())) {
                        map.put(aiCodeData.getAiCode6(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()) + Integer.parseInt(aiCodeData.getAiBit6())));
                        //判断截取完之后 前两位是否和aicode一致
                        if (!aiCodeData.getAiCode6().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode6().length() - Integer.parseInt(aiCodeData.getAiBit6())
                                , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6())))) {
                            throw new RuntimeException("扫描错误，清空扫描信息");
                        }
                        length += aiCodeData.getAiCode6().length() + Integer.parseInt(aiCodeData.getAiBit6());
                    }
                    if (aiCodeData.getAiCode5() != null && !"".equals(aiCodeData.getAiCode5())) {
                        map.put(aiCodeData.getAiCode5(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5()) + Integer.parseInt(aiCodeData.getAiBit5())));
                        //判断截取完之后 前两位是否和aicode一致
                        if (!aiCodeData.getAiBit5().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode5().length() - Integer.parseInt(aiCodeData.getAiBit5())
                                , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5())))) {
                            throw new RuntimeException("扫描错误，清空扫描信息");
                        }
                        length += aiCodeData.getAiCode5().length() + Integer.parseInt(aiCodeData.getAiBit5());
                    }
                    if (aiCodeData.getAiCode4() != null && !"".equals(aiCodeData.getAiCode4())) {
                        map.put(aiCodeData.getAiCode4(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4()) + Integer.parseInt(aiCodeData.getAiBit4())));
                        //判断截取完之后 前两位是否和aicode一致
                        if (!aiCodeData.getAiCode4().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode4().length() - Integer.parseInt(aiCodeData.getAiBit4())
                                , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4())))) {
                            throw new RuntimeException("扫描错误，清空扫描信息");
                        }
                        length += aiCodeData.getAiCode4().length() + Integer.parseInt(aiCodeData.getAiBit4());
                    }
                    if (aiCodeData.getAiCode3() != null && !"".equals(aiCodeData.getAiCode3())) {
                        map.put(aiCodeData.getAiCode3(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit3()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit3()) + Integer.parseInt(aiCodeData.getAiBit3())));
                        //判断截取完之后 前两位是否和aicode一致
                        if (!aiCodeData.getAiCode3().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode3().length() - Integer.parseInt(aiCodeData.getAiBit3())
                                , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit3())))) {
                            throw new RuntimeException("扫描错误，清空扫描信息");
                        }
                        length += aiCodeData.getAiCode3().length() + Integer.parseInt(aiCodeData.getAiBit3());
                    }
                    if (aiCodeData.getAiCode2() != null && !"".equals(aiCodeData.getAiCode2())) {
                        map.put(aiCodeData.getAiCode2(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit2()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit2()) + Integer.parseInt(aiCodeData.getAiBit2())));
                        //判断截取完之后 前两位是否和aicode一致
                        if (!aiCodeData.getAiCode2().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode2().length() - Integer.parseInt(aiCodeData.getAiBit2())
                                , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit2())))) {
                            throw new RuntimeException("扫描错误，清空扫描信息");
                        }
                        length += aiCodeData.getAiCode2().length() + Integer.parseInt(aiCodeData.getAiBit2());
                    }
                    map.put(aiCodeData.getAiCode1(), rowStr.substring(aiCodeData.getAiCode1().length(), rowStr.length() - length));
                    continue;
                }

                // 2
                if (!"".equals(aiCodeData.getAiCode2()) && aiCodeData.getAiCode2() != null) {
                    if (!"10".equals(aiCodeData.getAiCode2())) {
                        map.put(aiCodeData.getAiCode2(), rowStr.substring(subLength + aiCodeData.getAiCode2().length(), subLength + aiCodeData.getAiCode2().length() + Integer.parseInt(aiCodeData.getAiBit2())));
                        subLength += aiCodeData.getAiCode2().length() + Integer.parseInt(aiCodeData.getAiBit2());
                    } else {
                        int length = 0;
                        //10的话 则要反过来截取
                        if (aiCodeData.getAiCode7() != null && !"".equals(aiCodeData.getAiCode7())) {
                            map.put(aiCodeData.getAiCode7(), rowStr.substring(rowStr.length() - Integer.parseInt(aiCodeData.getAiBit7())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode7().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode7().length() - Integer.parseInt(aiCodeData.getAiBit7())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit7())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode7().length() + Integer.parseInt(aiCodeData.getAiBit7());
                        }
                        if (aiCodeData.getAiCode6() != null && !"".equals(aiCodeData.getAiCode6())) {
                            map.put(aiCodeData.getAiCode6(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()) + Integer.parseInt(aiCodeData.getAiBit6())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode6().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode6().length() - Integer.parseInt(aiCodeData.getAiBit6())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode6().length() + Integer.parseInt(aiCodeData.getAiBit6());
                        }
                        if (aiCodeData.getAiCode5() != null && !"".equals(aiCodeData.getAiCode5())) {
                            map.put(aiCodeData.getAiCode5(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5()) + Integer.parseInt(aiCodeData.getAiBit5())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode5().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode5().length() - Integer.parseInt(aiCodeData.getAiBit5())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode5().length() + Integer.parseInt(aiCodeData.getAiBit5());
                        }
                        if (aiCodeData.getAiCode4() != null && !"".equals(aiCodeData.getAiCode4())) {
                            map.put(aiCodeData.getAiCode4(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4()) + Integer.parseInt(aiCodeData.getAiBit4())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode4().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode4().length() - Integer.parseInt(aiCodeData.getAiBit4())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode4().length() + Integer.parseInt(aiCodeData.getAiBit4());
                        }
                        if (aiCodeData.getAiCode3() != null && !"".equals(aiCodeData.getAiCode3())) {
                            map.put(aiCodeData.getAiCode3(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit3()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit3()) + Integer.parseInt(aiCodeData.getAiBit3())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode3().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode3().length() - Integer.parseInt(aiCodeData.getAiBit3())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit3())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode3().length() + Integer.parseInt(aiCodeData.getAiBit3());
                        }
                        map.put(aiCodeData.getAiCode2(), rowStr.substring(subLength + aiCodeData.getAiCode2().length(), rowStr.length() - length));
                        continue;
                    }
                } else {
                    continue;
                }
                // 3
                if (!"".equals(aiCodeData.getAiCode3()) && aiCodeData.getAiCode3() != null) {
                    if (!"10".equals(aiCodeData.getAiCode3())) {
                        map.put(aiCodeData.getAiCode3(), rowStr.substring(subLength + aiCodeData.getAiCode3().length(), subLength + aiCodeData.getAiCode3().length() + Integer.parseInt(aiCodeData.getAiBit3())));
                        subLength += aiCodeData.getAiCode3().length() + Integer.parseInt(aiCodeData.getAiBit3());
                    } else {
                        int length = 0;
                        //10的话 则要反过来截取
                        if (aiCodeData.getAiCode7() != null && !"".equals(aiCodeData.getAiCode7())) {
                            map.put(aiCodeData.getAiCode7(), rowStr.substring(rowStr.length() - Integer.parseInt(aiCodeData.getAiBit7())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode7().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode7().length() - Integer.parseInt(aiCodeData.getAiBit7())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit7())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode7().length() + Integer.parseInt(aiCodeData.getAiBit7());
                        }
                        if (aiCodeData.getAiCode6() != null && !"".equals(aiCodeData.getAiCode6())) {
                            map.put(aiCodeData.getAiCode6(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()) + Integer.parseInt(aiCodeData.getAiBit6())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode6().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode6().length() - Integer.parseInt(aiCodeData.getAiBit6())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode6().length() + Integer.parseInt(aiCodeData.getAiBit6());
                        }
                        if (aiCodeData.getAiCode5() != null && !"".equals(aiCodeData.getAiCode5())) {
                            map.put(aiCodeData.getAiCode5(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5()) + Integer.parseInt(aiCodeData.getAiBit5())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode5().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode5().length() - Integer.parseInt(aiCodeData.getAiBit5())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode5().length() + Integer.parseInt(aiCodeData.getAiBit5());
                        }
                        if (aiCodeData.getAiCode4() != null && !"".equals(aiCodeData.getAiCode4())) {
                            map.put(aiCodeData.getAiCode4(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4()) + Integer.parseInt(aiCodeData.getAiBit4())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode4().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode4().length() - Integer.parseInt(aiCodeData.getAiBit4())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit4())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode4().length() + Integer.parseInt(aiCodeData.getAiBit4());
                        }
                        map.put(aiCodeData.getAiCode3(), rowStr.substring(subLength + aiCodeData.getAiCode3().length(), rowStr.length() - length));
                        continue;
                    }
                } else {
                    continue;
                }
                // 4
                if (!"".equals(aiCodeData.getAiCode4()) && aiCodeData.getAiCode4() != null) {
                    if (!"10".equals(aiCodeData.getAiCode4())) {
                        map.put(aiCodeData.getAiCode4(), rowStr.substring(subLength + aiCodeData.getAiCode4().length(), subLength + aiCodeData.getAiCode4().length() + Integer.parseInt(aiCodeData.getAiBit4())));
                        subLength += aiCodeData.getAiCode4().length() + Integer.parseInt(aiCodeData.getAiBit4());
                    } else {
                        int length = 0;
                        //10的话 则要反过来截取
                        if (aiCodeData.getAiCode7() != null && !"".equals(aiCodeData.getAiCode7())) {
                            map.put(aiCodeData.getAiCode7(), rowStr.substring(rowStr.length() - Integer.parseInt(aiCodeData.getAiBit7())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode7().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode7().length() - Integer.parseInt(aiCodeData.getAiBit7())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit7())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode7().length() + Integer.parseInt(aiCodeData.getAiBit7());
                        }
                        if (aiCodeData.getAiCode6() != null && !"".equals(aiCodeData.getAiCode6())) {
                            map.put(aiCodeData.getAiCode6(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()) + Integer.parseInt(aiCodeData.getAiBit6())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode6().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode6().length() - Integer.parseInt(aiCodeData.getAiBit6())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode6().length() + Integer.parseInt(aiCodeData.getAiBit6());
                        }
                        if (aiCodeData.getAiCode5() != null && !"".equals(aiCodeData.getAiCode5())) {
                            map.put(aiCodeData.getAiCode5(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5()) + Integer.parseInt(aiCodeData.getAiBit5())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode5().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode5().length() - Integer.parseInt(aiCodeData.getAiBit5())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit5())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode5().length() + Integer.parseInt(aiCodeData.getAiBit5());
                        }
                        map.put(aiCodeData.getAiCode4(), rowStr.substring(subLength + aiCodeData.getAiCode4().length(), rowStr.length() - length));
                        continue;
                    }
                } else {
                    continue;
                }
                // 5
                if (!"".equals(aiCodeData.getAiCode5()) && aiCodeData.getAiCode5() != null) {
                    if (!"10".equals(aiCodeData.getAiCode5())) {
                        map.put(aiCodeData.getAiCode5(), rowStr.substring(subLength + aiCodeData.getAiCode5().length(), subLength + aiCodeData.getAiCode5().length() + Integer.parseInt(aiCodeData.getAiBit5())));
                        subLength += aiCodeData.getAiCode5().length() + Integer.parseInt(aiCodeData.getAiBit5());
                    } else {
                        int length = 0;
                        //10的话 则要反过来截取
                        if (aiCodeData.getAiCode7() != null && !"".equals(aiCodeData.getAiCode7())) {
                            map.put(aiCodeData.getAiCode7(), rowStr.substring(rowStr.length() - Integer.parseInt(aiCodeData.getAiBit7())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode7().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode7().length() - Integer.parseInt(aiCodeData.getAiBit7())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit7())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode7().length() + Integer.parseInt(aiCodeData.getAiBit7());
                        }
                        if (aiCodeData.getAiCode6() != null && !"".equals(aiCodeData.getAiCode6())) {
                            map.put(aiCodeData.getAiCode6(), rowStr.substring(rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()), rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6()) + Integer.parseInt(aiCodeData.getAiBit6())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode6().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode6().length() - Integer.parseInt(aiCodeData.getAiBit6())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit6())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode6().length() + Integer.parseInt(aiCodeData.getAiBit6());
                        }
                        map.put(aiCodeData.getAiCode5(), rowStr.substring(subLength + aiCodeData.getAiCode5().length(), rowStr.length() - length));
                        continue;
                    }
                } else {
                    continue;
                }
                // 6
                if (!"".equals(aiCodeData.getAiCode6()) && aiCodeData.getAiCode6() != null) {
                    if (!"10".equals(aiCodeData.getAiCode6())) {
                        map.put(aiCodeData.getAiCode6(), rowStr.substring(subLength + aiCodeData.getAiCode6().length(), subLength + aiCodeData.getAiCode6().length() + Integer.parseInt(aiCodeData.getAiBit6())));
                        subLength += aiCodeData.getAiCode6().length() + Integer.parseInt(aiCodeData.getAiBit6());
                    } else {
                        int length = 0;
                        //10的话 则要反过来截取
                        if (aiCodeData.getAiCode7() != null && !"".equals(aiCodeData.getAiCode7())) {
                            map.put(aiCodeData.getAiCode7(), rowStr.substring(rowStr.length() - Integer.parseInt(aiCodeData.getAiBit7())));
                            //判断截取完之后 前两位是否和aicode一致
                            if (!aiCodeData.getAiCode7().equals(rowStr.substring(rowStr.length() - length - aiCodeData.getAiCode7().length() - Integer.parseInt(aiCodeData.getAiBit7())
                                    , rowStr.length() - length - Integer.parseInt(aiCodeData.getAiBit7())))) {
                                throw new RuntimeException("扫描错误，清空扫描信息");
                            }
                            length += aiCodeData.getAiCode7().length() + Integer.parseInt(aiCodeData.getAiBit7());
                        }
                        map.put(aiCodeData.getAiCode6(), rowStr.substring(subLength + aiCodeData.getAiCode6().length(), rowStr.length() - length));
                        continue;
                    }
                } else {
                    continue;
                }
                // 7
                if (!"".equals(aiCodeData.getAiCode7()) && aiCodeData.getAiCode7() != null) {
                    map.put(aiCodeData.getAiCode7(), rowStr.substring(subLength + aiCodeData.getAiCode7().length() + Integer.parseInt(aiCodeData.getAiBit7())));
                }
            }
        } catch (IndexOutOfBoundsException e) {
            throw new IndexOutOfBoundsException("扫描错误，清空扫描信息");
        }
        mapList.add(map);
        return mapList;
    }
}
